在以太坊虛擬機(EVM)中,每個字(word)是256位元的。在zkevm中,由於兩個限制,我們需要將這個字分成8位元的塊。在本教學中,我們將探討zkevm的word encoding的重要性和工作原理。
以 256 位元值 1 為例:
word256 = 1
這個 word256 可以被分解為 32 個 8 位元的字。
word8s = [
1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
]
256位元字以其8位元字的隨機線性組合來表示。commitment檢查應保證8位元範圍內的32個塊。
檢查a256 + b256 = c256的有效性。支援溢位以匹配EVM的行為。
範例:
a8s ff 0 0 0 0 0 0 0 | 0 0 0 0 0 0 0 0 | 0 0 0 0 0 0 0 0 | 0 0 0 0 0 0 0 0
b8s 2 1 0 0 0 0 0 0 | 0 0 0 0 0 0 0 0 | 0 0 0 0 0 0 0 0 | 0 0 0 0 0 0 0 0
carry 1 0 0 0 0 0 0 | 0 0 0 0 0 0 0 0 | 0 0 0 0 0 0 0 0 | 0 0 0 0 0 0 0 0 0
sum8s 1 2 0 0 0 0 0 0 | 0 0 0 0 0 0 0 0 | 0 0 0 0 0 0 0 0 | 0 0 0 0 0 0 0 0
檢查 a256 > b256、a256 < b256、a256 == b256 的關係。
我們將 8 位元的塊組合成 16 位元的塊以優化表格。結果將更高的塊的比較結論傳播到下方的所有塊。
範例:
a 1 0 0 0 | 0 0 0 0 | 0 0 0 0 | 0 1 0 0 |
b 1 0 0 0 | 0 0 0 0 | 0 0 0 0 | 0 0 0 0 |
result 1 1 1 1 | 1 1 1 1 | 1 1 1 1 | 1 1 0 0 |
在zkevm中,word encoding 不僅能夠將每個 256 位元的字分割成更小的塊進行處理,更能夠透過一系列的運算與檢查保證其準確性與安全性。在智能合約的運算中,這種編碼方式能夠確保資料
https://github.com/privacy-scaling-explorations/zkevm-specs/blob/master/specs/word-encoding.md